package com.huashi.dealer.modular.business.user.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.huashi.dealer.commonEntity.User;
import com.huashi.dealer.commonEntity.UserAddress;
import com.huashi.dealer.modular.business.user.param.StoreUserListParam;
import com.huashi.dealer.modular.business.user.param.StoreUserSaveParam;
import com.huashi.dealer.modular.business.user.param.StoreUserRechargeParam;
import com.huashi.dealer.modular.business.user.param.StoreUserRechargeApplyParam;
import com.huashi.dealer.modular.business.user.param.StoreUserAddressListParam;
import com.huashi.dealer.modular.business.user.param.StoreUserAddressSaveParam;
import com.huashi.dealer.modular.business.user.param.StoreUserSalesmanParam;
import com.huashi.dealer.modular.business.user.vo.StoreUserListVo;
import com.huashi.dealer.modular.business.user.vo.StoreUserDetailVo;
import com.huashi.dealer.modular.business.user.vo.StoreUserAddressListVo;
import com.huashi.dealer.modular.business.user.vo.StoreUserAddressDetailVo;
import com.huashi.dealer.modular.business.user.vo.StoreUserSalesmanVo;

import java.util.List;

/**
 * Store端用户管理服务接口
 * 对应PHP项目的/store/user功能
 *
 * @author 谭陈强
 * @since 2025-08-07
 */
public interface StoreUserManageService extends IService<User> {

    /**
     * 获取用户列表
     *
     * @param param 查询参数
     * @param page 分页参数
     * @return 用户列表分页数据
     */
    Page<StoreUserListVo> getUserList(StoreUserListParam param, Page<User> page);

    /**
     * 获取用户详情
     *
     * @param userId 用户ID
     * @return 用户详情
     */
    StoreUserDetailVo getUserDetail(Long userId);

    /**
     * 新增用户
     *
     * @param param 用户信息
     */
    void addUser(StoreUserSaveParam param);

    /**
     * 编辑用户
     *
     * @param param 用户信息
     */
    void editUser(StoreUserSaveParam param);

    /**
     * 删除用户
     *
     * @param userId 用户ID
     */
    void deleteUser(Long userId);

    /**
     * 用户充值
     *
     * @param param 充值参数
     */
    void rechargeUser(StoreUserRechargeParam param);

    /**
     * 用户充值申请
     * 保存到user_recharge_review表，等待审核
     *
     * @param param 充值申请参数
     */
    void rechargeApply(StoreUserRechargeApplyParam param);

    /**
     * 根据省市区获取业务员列表
     *
     * @param param 省市区参数
     * @return 业务员列表
     */
    List<StoreUserSalesmanVo> getSalesmanList(StoreUserSalesmanParam param);

    /**
     * 获取用户地址列表
     *
     * @param param 查询参数
     * @return 用户地址列表
     */
    Page<StoreUserAddressListVo> getUserAddressList(Page<UserAddress> page, StoreUserAddressListParam param);

    /**
     * 获取用户地址详情
     *
     * @param userId 用户ID
     * @param addressId 地址ID
     * @return 用户地址详情
     */
    StoreUserAddressDetailVo getUserAddressDetail(Long userId, Long addressId);

    /**
     * 保存用户地址（新增/编辑合一）
     *
     * @param param 保存参数
     */
    void saveUserAddress(StoreUserAddressSaveParam param);

    /**
     * 删除用户地址
     *
     * @param userId 用户ID
     * @param addressId 地址ID
     */
    void deleteUserAddress(Long userId, Long addressId);
}
